#include <iostream>

using namespace std;

const int N = 1e6 + 10;

//1.用字符串读入数
//2.用数组逆序存储该数的每一位
//3.利用数组，模拟小学列竖式计算加法的过程
//注意：字符需要-'0'才能得到数字

string a, b;
int num1[N], num2[N], num3[N];
int len1, len2, len3;

//1001   --> 1001
//9099   --> 9909
//10100  --> 00101
//对应位相加
//1)如果相加后超过10，让后一位存下进位, 然后当前位仅保留余数
//2)如果是最后一位相加后超过10，不要忘了len3++
void add(int num1[], int num2[], int num3[])
{
	for(int i = 0; i < len3; i++)
	{
		num3[i] += num1[i] + num2[i]; // 对应位相加，再加上进位
		num3[i + 1] = num3[i] / 10; // 处理进位
		num3[i] %= 10; // 处理余数
	}

	if(num3[len3]) len3++;
}

int main()
{
	cin >> a >> b;
	//1.拆分每一位，逆序放在数组中
	len1 = a.size(); len2 = b.size(); len3 = max(len1, len2);

	for(int i = len1 - 1; i >= 0; i--) num1[len1 - i - 1] = a[i] - '0';
	for(int i = len2 - 1; i >= 0; i--) num2[len2 - i - 1] = b[i] - '0';

	//2.模拟加法的过程
	add(num1, num2, num3);

	//3.输出结果
	for(int i = len3 - 1; i >= 0; i--) cout << num3[i];

	return 0;
}


